iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
SideProject30

python基礎及數據科學之應用系列 第 8

python基礎及數據科學之應用day 8[Python基礎應用(Requests模組進階嘗試和webbrowser)]

  • 分享至 

  • xImage
  •  

今天會詳細介紹天文台預報其他功能,會處理更複雜的資料,也有一個web browser的例子那麼便開始啦

小提示, Google中有一個按鈕是美化排版,選擇了就更容易閱讀

如果還沒有看python request的可以到我昨天的教學再看一次。

九天天氣預報

import requests as req

url="https://data.weather.gov.hk/weatherAPI/opendata/weather.php"
data="fnd"
lang="tc"

response = req.get(f"{url}?dataType={data}&lang={lang}")
n=eval(response.text)
print(type(n))

for i in range(9):
    print(n["weatherForecast"][i]["forecastDate"] + " : " + n["weatherForecast"][i] ["forecastWeather"]) #Dict>list>dict 中的內容

執行結果:

<class 'dict'>
20230923 : 部分時間有陽光,局部地區有驟雨。日間酷熱。
20230924 : 短暫時間有陽光,有幾陣驟雨。
20230925 : 部分時間有陽光。
20230926 : 部分時間有陽光,局部地區有驟雨。
20230927 : 短暫時間有陽光,有幾陣驟雨。
20230928 : 大致多雲,有幾陣驟雨。日間短暫時間有陽光。
20230929 : 大致多雲,有幾陣驟雨。日間短暫時間有陽光。
20230930 : 大致多雲,有幾陣驟雨。日間短暫時間有陽光。
20231001 : 大致多雲,有幾陣驟雨。日間短暫時間有陽光。

這樣便取得天氣預報,並應用在你個人的項目。

小練習

嘗試取得詳細天氣警告訊息

/images/emoticon/emoticon30.gif

答案:

import requests as req

url="https://data.weather.gov.hk/weatherAPI/opendata/weather.php"
data="warningInfo"
lang="tc"

response = req.get(f"{url}?dataType={data}&lang={lang}")
n=eval(response.text)
print(type(n))

for i in (n["details"][0]["contents"]):
    print(i)

執行結果:

>><class 'dict'>
香港天文台在上午6時45分發出酷熱天氣警告。
天文台預料今日本港天氣酷熱,市民應慎防中暑。
長者、孕婦、嬰兒及小童、慢性病如心臟病或高血壓患者,以及過胖人士均較易中暑,應及時觀察是否出現中暑徵兆。
在炎熱天氣下或高溫環境中工作的人士,請參照勞工處的預防工作時中暑指引,採取所需的防暑措施。
在戶外活動的人士,應多補充水分和不要過度勞累。於感覺不適時,應儘快到陰涼的地方休息。戶外活動宜安排在早上或下午較後的時間進行。
在室內活動時,亦應適時補充水分。如室內沒有空調設備,應儘量打開窗戶及以風扇保持空氣流通,亦可使用可供避暑的公共設施。
避免長時間在陽光下曝曬,以免受太陽紫外線曬傷。應穿上淺色和通爽衣服以及配戴濶邊帽子和能阻隔紫外線的太陽眼鏡。
多塗防曬系數為15或以上的廣譜防曬液。在陽光下停留超過兩小時後,以及在游泳、流汗或以毛巾抹身後,再次塗上防曬液。
請關注長者或慢性病患者的健康狀況。如認識他們,請間中致電或探訪他們,並留意他們住所的通風及空氣調節設備是否運作正常。
較易中暑人士應儘量避免戶外活動,遠離高溫環境,到陰涼、通風或有空氣調節的地方。

如果你答對了,那麼你便掌握字典及字串的選擇。

一些不能用簡單方法存取的網站

部份網站基於安全理由或減少應用程式查詢伺服器的次數,會封鎖來自requests的請求,但我們可以更改程式嗎來避開他的檢查。下面是例子:

import requests as req

url = "https://pixelford.com/blog/"
response=req.get(url)
print(response.status_code)

print(response.content)

執行結果:

>>403
>>b'403 - Forbidden | Access to this page is forbidden.\n'

what is http403

403 Forbidden 是HTTP協定中的一個HTTP狀態碼(Status Code)。403狀態碼意為伺服器成功解析請求但是客戶端沒有訪問該資源的權限。

other http 代碼

狀態碼 回應
200 成功回應。
404 找不到想要找的訊息。
400 主要有兩種,第一種是錯誤的請求(例如錯誤網址),另一種是不存在的網站。
500 他們的伺服器發生錯誤,導致無法存取。
301 伺服器資源已轉自另外一個網域。

還有更多狀態碼可以上google 自行查詢。

如何解決這個問題

從上面的例子可見部份網站會封鎖我們,不讓我們取得內容所以我們需要更改程式碼。

偽裝成其他瀏覽器:

import requests as req

headers = {
    'User-Agent': 'Mozilla/5.0'
}

url = "https://pixelford.com/blog/"
response=req.get(url,headers=headers)
print(response.status_code)

執行結果:

>>200

什麼是webbrowser

在Python中,webbrowser模組提供了用於顯示和控制網頁瀏覽器的高級介面。它允許您在使用者的預設 Web 瀏覽器中開啟網頁、URL 或檔案。

小提示,這個模組和random一樣是python本身設置的,不需另外安裝,十分方便。

例子:

import webbrowser
url = "https://www2.pyc.edu.hk/pycnet/index.php"
browser = webbrowser.get("windows-default")
browser.open(url)

執行結果:
從瀏覽器中打開網站

這天就先介介紹requests的進階,如無意外的話明天我將會介紹Json檔案讀取,如果覺得我的文章對你有幫助或有更好的建議,可以追蹤我,可以按讚和不妨在留言區提出,明天再見吧。bye

/images/emoticon/emoticon13.gif
reference:
https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status


上一篇
python基礎及數據科學之應用day 7[Python基礎應用(Requests模組進階嘗試及提取天文台資料)]
下一篇
python基礎及數據科學之應用day 9[Python 匯出及匯入json]
系列文
python基礎及數據科學之應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言